#ifndef NANE_SOUNDSYSTEMIMPL__H
#   define NANE_SOUNDSYSTEMIMPL__H

#   include "nane/SoundSystem/SoundSystem.h"
#   include <vector>

namespace nane
{
    class SoundSystem::Implementation
        : public SubSystem<ISoundSystem>::Implementation
    {
    public:
        Implementation();
        ~Implementation();

    public:
        void RegisterUpdate( SoundSource::Implementation* _soundSourceImpl );
        void Update( uint32 _ms );
        void UnregisterUpdate( SoundSource::Implementation* _soundSourceImpl );

    public:
        void Release( SoundBuffer::Implementation* _soundBufferImpl );
        void Release( SoundSource::Implementation* _soundSourceImpl );
        void Release( SoundSource3D::Implementation* _soundSource3DImpl );

    public:
        bool contextInitialized;
        std::vector<SoundSource::Implementation*> activeSources;
        std::vector<std::vector<SoundSource::Implementation*>::iterator> inactiveSources;
        bool updating;
    };
}   // namespace nane

#endif // NANE_SOUNDSYSTEMIMPL__H
